<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /*
            箭头函数
                - 使用格式
                    (param1,param2,...) => {
                        //函数体
                    }
                - 一些注意事项
                    - 当只有一个参数时，小括号可以省略
                    - 当函数体内只有一句return xxx时候，return和大括号都可以省略，直接写在箭头右侧就行
                    - 其实也不一定只有return的时候，比如你只想console.log(xxx)，也同样可以用上一条说的省略大括号的写法
                    - 但是如果返回值是个对象，那就要注意了，因为对象的大括号和函数体的大括号js无法区分，所以要用小括号包裹下
                    - 箭头函数是没有arguments的
                    - 箭头函数是不能new的
                    - 箭头函数的this是指向父作用域的，也可以说箭头函数没有this
        */
        // 看个小案例
        console.log([111, 222, 333].map(item => `<li>${item}</li>`)); //一行就整完了，是不是很炫酷

        // 防止对象的大括号和函数体的大括号无法区分，用小括号包裹一下
        let test1 = () => ({
            name:'mikaisa',
            age:18
        });

        // 相信我们都用过定时器, 如果使用传统函数，那么定时器回调函数里的this就会指向window
        // 这时我们就可以用箭头函数，就完美规避了这个问题，就可以读取到obj里的name属性了
        let obj = {
            name:'mikaisa',
            delay1(){
                setTimeout(function(){
                    console.log(this);//window
                }, 1000);
            },
            delay2(){
                setTimeout(() => {
                    console.log(this.name);//mikaisa
                }, 1000);
            }
        }
        obj.delay1();
        obj.delay2();
    </script>
</body>

</html>